package com.jh.ios.forecast.wxapi;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import com.tencent.mm.opensdk.constants.ConstantsAPI;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.modelbiz.ChooseCardFromWXCardPackage;
import com.tencent.mm.opensdk.modelbiz.WXLaunchMiniProgram;
import com.tencent.mm.opensdk.modelmsg.SendAuth;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;

import org.apache.cordova.CallbackContext;
import org.apache.cordova.MainApplication;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import xu.li.cordova.wechat.Wechat;

public class EntryActivity extends Activity  implements IWXAPIEventHandler {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        IWXAPI api = Wechat.getWxAPI(this);

        if (api == null) {
            startMainActivity();
        } else {
            api.handleIntent(getIntent(), this);
        }
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);

        setIntent(intent);

        IWXAPI api = Wechat.getWxAPI(this);
        if (api == null) {
            startMainActivity();
        } else {
            api.handleIntent(intent, this);
        }

    }

    @Override
    public void onResp(BaseResp resp) {
        Log.d(Wechat.TAG, resp.errCode+"");

        CallbackContext ctx = Wechat.getCurrentCallbackContext();

        if (ctx == null) {
            startMainActivity();
            return ;
        }

        switch (resp.errCode) {
            case BaseResp.ErrCode.ERR_OK:
                switch (resp.getType()) {
                    case ConstantsAPI.COMMAND_SENDAUTH:
                        auth(resp);
                        break;
                    case ConstantsAPI.COMMAND_CHOOSE_CARD_FROM_EX_CARD_PACKAGE:
                        plunckInvoiceData(resp);
                        break;
                    case ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM:
                        Log.d(Wechat.TAG, "miniprogram back;");
                        WXLaunchMiniProgram.Resp miniProResp = (WXLaunchMiniProgram.Resp) resp;
                        launchMiniProResp(miniProResp);
                        break;
                    case ConstantsAPI.COMMAND_PAY_BY_WX:
                    default:
                        Log.d(Wechat.TAG,"分享成功");
                        Toast.makeText(MainApplication.getContent(),"分享成功",Toast.LENGTH_LONG).show();
                        ctx.success();
                        finish();
                        break;
                }
                break;
            case BaseResp.ErrCode.ERR_USER_CANCEL:
                ctx.error(Wechat.ERROR_WECHAT_RESPONSE_USER_CANCEL);
                break;
            case BaseResp.ErrCode.ERR_AUTH_DENIED:
                ctx.error(Wechat.ERROR_WECHAT_RESPONSE_AUTH_DENIED);
                break;
            case BaseResp.ErrCode.ERR_SENT_FAILED:
                ctx.error(Wechat.ERROR_WECHAT_RESPONSE_SENT_FAILED);
                break;
            case BaseResp.ErrCode.ERR_UNSUPPORT:
                ctx.error(Wechat.ERROR_WECHAT_RESPONSE_UNSUPPORT);
                break;
            case BaseResp.ErrCode.ERR_COMM:
                ctx.error(Wechat.ERROR_WECHAT_RESPONSE_COMMON);
                break;
            default:
                ctx.error(Wechat.ERROR_WECHAT_RESPONSE_UNKNOWN);
                break;
        }

    }

    @Override
    public void onReq(BaseReq req) {
        finish();
    }

    protected void startMainActivity() {
        Intent intent = new Intent();
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setPackage(getApplicationContext().getPackageName());
        getApplicationContext().startActivity(intent);
    }

    protected void launchMiniProResp(WXLaunchMiniProgram.Resp launchMiniProResp){
        CallbackContext ctx = Wechat.getCurrentCallbackContext();
        String extraData =launchMiniProResp.extMsg; //对应小程序组件 <button open-type="launchApp"> 中的 app-parameter 属性
        JSONObject response = new JSONObject();
        try {
            response.put("extMsg", extraData);
        }catch (Exception e){
            Log.e(Wechat.TAG, e.getMessage());
        }
        ctx.success(response);
    }

    protected void auth(BaseResp resp) {
        SendAuth.Resp res = ((SendAuth.Resp) resp);

        Log.d(Wechat.TAG, res.toString());

        // get current callback context
        CallbackContext ctx = Wechat.getCurrentCallbackContext();

        if (ctx == null) {
            return ;
        }

        JSONObject response = new JSONObject();
        try {
            response.put("code", res.code);
            response.put("state", res.state);
            response.put("country", res.country);
            response.put("lang", res.lang);
        } catch (JSONException e) {
            Log.e(Wechat.TAG, e.getMessage());
        }

        ctx.success(response);
    }

    protected void plunckInvoiceData(BaseResp resp) {

        CallbackContext ctx = Wechat.getCurrentCallbackContext();
        ChooseCardFromWXCardPackage.Resp resp1 = (ChooseCardFromWXCardPackage.Resp) resp;
        JSONObject response = new JSONObject();

        try {
            JSONArray resp2 = new JSONArray(resp1.cardItemList);
            response.put("data", resp2);
        } catch (JSONException e) {
            Log.e(Wechat.TAG, e.getMessage());
        }

        ctx.success(response);
    }

//    public  IWXAPI api;
//
//    @Override
//    public void onCreate(Bundle savedInstanceState) {
//        super.onCreate(savedInstanceState);
//        Log.i("EntryActivity","onCreate");
//        api = getWxAPI();
//
//        if (api == null) {
//            startMainActivity();
//        } else {
//            api.handleIntent(getIntent(), this);
//        }
//    }
//
//    @Override
//    protected void onNewIntent(Intent intent) {
//        super.onNewIntent(intent);
//        Log.i("EntryActivity","onNewIntent");
//        setIntent(intent);
//
//        api = getWxAPI();
//        if (api == null) {
//            startMainActivity();
//        } else {
//            api.handleIntent(intent, this);
//        }
//
//    }
//
//    @Override
//    public void onResp(BaseResp resp) {
//        Log.i("EntryActivity","onResp == "+resp.errCode);
//
//        if (this == null) {
//            startMainActivity();
//            return ;
//        }
//
//        switch (resp.errCode) {
//            case BaseResp.ErrCode.ERR_OK:
//                switch (resp.getType()) {
//                    case ConstantsAPI.COMMAND_SENDAUTH:
//                        auth(resp);
//                        break;
//                    case ConstantsAPI.COMMAND_CHOOSE_CARD_FROM_EX_CARD_PACKAGE:
//                        plunckInvoiceData(resp);
//                        break;
//                    case ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM:
//                        WXLaunchMiniProgram.Resp miniProResp = (WXLaunchMiniProgram.Resp) resp;
//                        launchMiniProResp(miniProResp);
//                        break;
//                    case ConstantsAPI.COMMAND_PAY_BY_WX:
//
//                    default:
//
//                        break;
//                }
//                break;
//            case BaseResp.ErrCode.ERR_USER_CANCEL:
//                break;
//            case BaseResp.ErrCode.ERR_AUTH_DENIED:
//                break;
//            case BaseResp.ErrCode.ERR_SENT_FAILED:
//                break;
//            case BaseResp.ErrCode.ERR_UNSUPPORT:
//                break;
//            case BaseResp.ErrCode.ERR_COMM:
//                break;
//            default:
//                break;
//        }
//
//        finish();
//    }
//
//    @Override
//    public void onReq(BaseReq req) {
//        Log.i("EntryActivity","onReq");
//        finish();
//    }
//
//    protected void startMainActivity() {
//        Intent intent = new Intent();
//        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//        intent.setPackage(getApplicationContext().getPackageName());
//        getApplicationContext().startActivity(intent);
//    }
//
//    protected void launchMiniProResp(WXLaunchMiniProgram.Resp launchMiniProResp){
//
//    }
//
//    protected void auth(BaseResp resp) {
//        SendAuth.Resp res = ((SendAuth.Resp) resp);
//
//
//    }
//
//    protected void plunckInvoiceData(BaseResp resp) {
//
//
//    }
//
//
//    public IWXAPI getWxAPI(){
//        if (api == null){
//            api = WXAPIFactory.createWXAPI(this, "wxf104c3350460084a", true);
//        }
//        return api;
//    }


//    @Override
//    public void onCreate(Bundle savedInstanceState) {
//        super.onCreate(savedInstanceState);
//
//        IWXAPI api = Wechat.getWxAPI(this);
//
//        if (api == null) {
//            startMainActivity();
//        } else {
//            api.handleIntent(getIntent(), this);
//        }
//    }
//
//    @Override
//    protected void onNewIntent(Intent intent) {
//        super.onNewIntent(intent);
//
//        setIntent(intent);
//
//        IWXAPI api = Wechat.getWxAPI(this);
//        if (api == null) {
//            startMainActivity();
//        } else {
//            api.handleIntent(intent, this);
//        }
//
//    }
//
//    @Override
//    public void onResp(BaseResp resp) {
//        Log.d("EntryActivity", resp.toString());
//        Log.i("EntryActivity","onResp == "+resp.errCode);
//        CallbackContext ctx = Wechat.getCurrentCallbackContext();
//
//        if (ctx == null) {
//            startMainActivity();
//            return ;
//        }
//
//        switch (resp.errCode) {
//            case BaseResp.ErrCode.ERR_OK:
//                switch (resp.getType()) {
//                    case ConstantsAPI.COMMAND_SENDAUTH:
//                        auth(resp);
//                        break;
//                    case ConstantsAPI.COMMAND_CHOOSE_CARD_FROM_EX_CARD_PACKAGE:
//                        plunckInvoiceData(resp);
//                        break;
//                    case ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM:
//                        Log.d(Wechat.TAG, "miniprogram back;");
//                        WXLaunchMiniProgram.Resp miniProResp = (WXLaunchMiniProgram.Resp) resp;
//                        launchMiniProResp(miniProResp);
//                        break;
//                    case ConstantsAPI.COMMAND_PAY_BY_WX:
//                    default:
//                        ctx.success();
//                        break;
//                }
//                break;
//            case BaseResp.ErrCode.ERR_USER_CANCEL:
//                ctx.error(Wechat.ERROR_WECHAT_RESPONSE_USER_CANCEL);
//                break;
//            case BaseResp.ErrCode.ERR_AUTH_DENIED:
//                ctx.error(Wechat.ERROR_WECHAT_RESPONSE_AUTH_DENIED);
//                break;
//            case BaseResp.ErrCode.ERR_SENT_FAILED:
//                ctx.error(Wechat.ERROR_WECHAT_RESPONSE_SENT_FAILED);
//                break;
//            case BaseResp.ErrCode.ERR_UNSUPPORT:
//                ctx.error(Wechat.ERROR_WECHAT_RESPONSE_UNSUPPORT);
//                break;
//            case BaseResp.ErrCode.ERR_COMM:
//                ctx.error(Wechat.ERROR_WECHAT_RESPONSE_COMMON);
//                break;
//            default:
//                ctx.error(Wechat.ERROR_WECHAT_RESPONSE_UNKNOWN);
//                break;
//        }
//
//        finish();
//    }
//
//    @Override
//    public void onReq(BaseReq req) {
//        finish();
//    }
//
//    protected void startMainActivity() {
//        Intent intent = new Intent();
//        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//        intent.setPackage(getApplicationContext().getPackageName());
//        getApplicationContext().startActivity(intent);
//    }
//
//    protected void launchMiniProResp(WXLaunchMiniProgram.Resp launchMiniProResp){
//        CallbackContext ctx = Wechat.getCurrentCallbackContext();
//        String extraData =launchMiniProResp.extMsg; //对应小程序组件 <button open-type="launchApp"> 中的 app-parameter 属性
//        JSONObject response = new JSONObject();
//        try {
//            response.put("extMsg", extraData);
//        }catch (Exception e){
//            Log.e(Wechat.TAG, e.getMessage());
//        }
//        ctx.success(response);
//    }
//
//    protected void auth(BaseResp resp) {
//        SendAuth.Resp res = ((SendAuth.Resp) resp);
//
//        Log.d(Wechat.TAG, res.toString());
//
//        // get current callback context
//        CallbackContext ctx = Wechat.getCurrentCallbackContext();
//
//        if (ctx == null) {
//            return ;
//        }
//
//        JSONObject response = new JSONObject();
//        try {
//            response.put("code", res.code);
//            response.put("state", res.state);
//            response.put("country", res.country);
//            response.put("lang", res.lang);
//        } catch (JSONException e) {
//            Log.e(Wechat.TAG, e.getMessage());
//        }
//
//        ctx.success(response);
//    }
//
//    protected void plunckInvoiceData(BaseResp resp) {
//
//        CallbackContext ctx = Wechat.getCurrentCallbackContext();
//        ChooseCardFromWXCardPackage.Resp resp1 = (ChooseCardFromWXCardPackage.Resp) resp;
//        JSONObject response = new JSONObject();
//
//        try {
//            JSONArray resp2 = new JSONArray(resp1.cardItemList);
//            response.put("data", resp2);
//        } catch (JSONException e) {
//            Log.e(Wechat.TAG, e.getMessage());
//        }
//
//        ctx.success(response);
//    }
//

}
